package com.ruoyi.mapper;

import com.ruoyi.domain.vo.*;
import com.ruoyi.system.domain.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

@Mapper
public interface UserCenterMapper {
    /**
     * 查询用户信息
     *
     * @param account 用户账号
     * @return 用户信息
     */
    public UserInfoVo selectUserInfoByAccount(@Param("account") String account);


    /**
     * 查询用户信息
     *
     * @param openid openid
     * @return 用户信息
     */
    UserInfoVo selectUserInfoByOpenid(@Param("openid") String openid);

    /**
     * 查询用户信息
     *
     * @param wechat 用户微信号
     * @return 用户信息
     */
    public UserInfoVo selectUserInfoByWechat(@Param("wechat") String wechat);

    /**
     * 修改用户信息管理
     *
     * @param userInfo 用户信息管理
     * @return 结果
     */
    int updateUserInfo(UserInfo userInfo);


    /**
     * 查询低碳行为记录
     *
     * @param userId 用户ID
     * @return 低碳行为信息
     */
    public List<BehaviorRecode> selectBehaviorByUserID(@Param("userId")Long userId, @Param("offset") Long offset, @Param("pageSize") Long pageSize);

    /**
     * 查询低碳活动记录
     *
     * @param userId 用户ID
     * @return 低碳活动记录
     */
    public List<ActivityLogs> selectActivityLogsByUserID(@Param("userId") Long userId, @Param("offset") Long offset, @Param("pageSize") Long pageSize);

    /**
     * 查询地址记录
     *
     * @param userId 用户ID
     * @return 地址信息
     */
    public List<Address> selectAddressByUserId(Long userId);

    /**
     * 查询用户信息，根据减碳量降序
     *
     *
     * @return 用户信息，通过减碳量排序
     */
    public List<UserInfoVo> selectUserInfoByReduceCo2();

    /**
     * 根据日减碳量排名获取用户信息列表
     * @param offset 页码
     * @param pageSize 页大小
     * @return 用户信息列表
     */
    public List<UserInfoVo> getUserInfoByReduceCo2Day(@Param("offset") Long offset, @Param("pageSize") Long pageSize);

    /**
     * 根据月减碳量排名获取用户信息列表
     * @param offset 页码
     * @param pageSize 页大小
     * @return 用户信息列表
     */
    public List<UserInfoVo> getUserInfoByReduceCo2Month(@Param("offset") Long offset, @Param("pageSize") Long pageSize);

    /**
     * 根据减碳量排名获取组织信息列表
     * @param offset 页码
     * @param pageSize 页大小
     * @return 组织信息列表
     */
    public List<OrganizationVo>selectOrganizationList(@Param("offset") Long offset, @Param("pageSize") Long pageSize);

    /**
     * 根据日减碳量排名获取组织信息列表
     * @param offset 页码
     * @param pageSize 页大小
     * @return 组织信息列表
     */
    public List<OrganizationVo>selectOrganizationListDay(@Param("offset") Long offset, @Param("pageSize") Long pageSize);

    /**
     * 根据月减碳量排名获取组织信息列表
     * @param offset 页码
     * @param pageSize 页大小
     * @return 组织信息列表
     */
    public List<OrganizationVo>selectOrganizationListMonth(@Param("offset") Long offset, @Param("pageSize") Long pageSize);

    String getPointsRule();

    List<UserInfoVo> getUserList();

    void updateDefaultAddress(@Param("userId") Long userId, @Param("addressId") Long addressId);

    List<OrderInfo> getOrderInfoList(@Param("userId") Long userId, @Param("offset") Long offset, @Param("pageSize") Long pageSize);

    List<Map<String, Object>> selectOrderItemByOrderId(Long orderId);

    Map<String, Object> selectRelateGoods(String relateGoodsId);

    List<PayedOrderVo> selectPayedOrder(@Param("userId") Long userId, @Param("offset") Long offset, @Param("pageSize") Long pageSize, @Param("goodsName") String goodsName);

    List<OrderInfo> selectNoPayOrderByGoodsName(@Param("userId") Long userId, @Param("goodsName") String goodsName);

    Long getUserPoints(Long userId);

    String getCo2ReduceToPoints();

    String getCo2ReduceToRMB();

    String getPointsToRMB();

    void deleteTimeoutOrder();

    void confirmReceipt(Long orderItemId);

    void updateOrderItemEvaluateState(Long orderItemId);

    void updateOrderItemEvaluateStateFalse(Long orderItemId);

    void addRefund(Refund refund);

    Long getMaxRefundNum(Long orderItemId);

    void updateOrderItemRefundCounts(@Param("orderItemId") Long orderItemId);

    List<Refund> getRefundRecordByOrderItemId(Long orderItemId);

    Long selectActivityLogCountByUserID(Long userId);

    Long selectBehaviorCountByUserID(Long userId);

    Long getOrderInfoCount(Long userId);

    void insertUserInfo(UserInfoVo userInfo);

    void updateTitleCode(@Param("userId") Long userId, @Param("co2Reduce") Double co2Reduce);

    Double getUserReduceCo2Day(Long userId);

    Double getUserReduceCo2Month(Long userId);

    Double getOrganizationReduceCo2Day(Long userId);

    Double getOrganizationReduceCo2Month(Long userId);

    void reSubmitRefund(@Param("refund") Refund refund);

    void deleteAddressByAddressId(Long addressId);

    boolean hasPassword(Long userId);

    boolean checkPassword(@Param("userId") Long userId, @Param("originalPassword") String originalPassword);

    void changePassword(@Param("userId") Long userId, @Param("newPassword") String newPassword);

    String getSessionKey(Long userId);

}